#!/usr/bin/python
# author dennis
# 2022年06月19日
import socket
import struct


def tcp_init():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    addr = ('', 2000)
    s.bind(addr)
    s.listen(128)
    return s


def send_file():
    file_name = 'file1'
    s = tcp_init()
    new_client, _ = s.accept()
    # 先发文件名
    file_name_bytes = file_name.encode('utf8')
    # 按照指定格式将Python数据转换为字符串, 该字符串为字节流, 如网络传输时, 不能传输int, 此时先将int转化为字节流, 然后再发送;
    # 按照指定格式将字节流转换为Python指定的数据类型;
    # 处理二进制数据, 如果用struct来处理文件的话, 需要用’wb’, ’rb’以二进制(字节流)写, 读的方式来处理文件;
    train_head_bytes = struct.pack('I', len(file_name_bytes))
    new_client.send(train_head_bytes + file_name_bytes)
    # 发送文件内容
    file = open(file_name, 'rb')
    file_content = file.read()
    train_head_bytes = struct.pack('I', len(file_content))
    new_client.send(train_head_bytes + file_content)
    file.close()
    new_client.close()
    s.close()


if __name__ == '__main__':
    send_file()
